package com.xiaoyao.myframeapp.utils.DefineLoadMoreView;

import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.xiaoyao.myframeapp.R;
import com.yanzhenjie.loading.LoadingView;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView;


/**
 * @Author xiaoyao
 * @Email xiao80206040@qq.com
 * @Explain
 * @Created by Administrator on 2017/7/28 0028 15:36
 */
public class DefineLoadMoreView extends LinearLayout implements SwipeMenuRecyclerView.LoadMoreView, View.OnClickListener {

    public static final int DEFINELOADMOREVIEW_NO_0 = 0;//TODO 加载失败 网络异常
    public static final int DEFINELOADMOREVIEW_NO_1 = 1;//TODO 加载成功  但是失败
    public static final int DEFINELOADMOREVIEW_OK = 2;//TODO 加载成功
    public static final int DEFINELOADMOREVIEW_LOADING = 3;//TODO 加载中
    public static final int DEFINELOADMOREVIEW_NULL = 4;//TODO 没有了
    private int iData = DEFINELOADMOREVIEW_OK;
    private RelativeLayout a_layout_fotter_loadmore;
    private LoadingView mLoadingView;
    private TextView mTvMessage;
//    private InfoHint infoHint;

    private SwipeMenuRecyclerView.LoadMoreListener mLoadMoreListener;

    public DefineLoadMoreView(Context context, final InfoHint infoHint) {
        super(context);
//        this.infoHint = infoHint;
//        setLayoutParams(new ViewGroup.LayoutParams(-1, -2));
        setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
//        setBackgroundResource(R.color.bjs);
//        setBackgroundResource(R.color.qjs);
        setBackgroundResource(R.drawable.model_item_btn);
//        setGravity(Gravity.CENTER);

        inflate(getContext(), R.layout.a_layout_fotter_loadmore, this);
        a_layout_fotter_loadmore = (RelativeLayout) findViewById(R.id.a_layout_fotter_loadmore);

        mLoadingView = (LoadingView) findViewById(R.id.loading_view);
        mTvMessage = (TextView) findViewById(R.id.tv_message);

        int color1 = ContextCompat.getColor(getContext(), android.R.color.holo_blue_bright);
        int color2 = ContextCompat.getColor(getContext(), android.R.color.holo_green_light);
        int color3 = ContextCompat.getColor(getContext(), android.R.color.holo_orange_light);

        mLoadingView.setCircleColors(color1, color2, color3);

        //TODO 设置点击事件
        a_layout_fotter_loadmore.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                infoHint.setOnClickListener(iData);
            }
        });
    }

    /**
     * 马上开始回调加载更多了，这里应该显示进度条。
     */
    @Override
    public void onLoading() {
        a_layout_fotter_loadmore.setVisibility(VISIBLE);
        mLoadingView.setVisibility(VISIBLE);
        mTvMessage.setVisibility(VISIBLE);
        mTvMessage.setText("正在努力加载，请稍后");
        iData = DEFINELOADMOREVIEW_LOADING;
    }

    /**
     * 加载更多完成了。
     *
     * @param dataEmpty 是否请求到空数据。 f  有 t 无
     * @param hasMore   是否还有更多数据等待请求。
     */
    @Override
    public void onLoadFinish(boolean dataEmpty, boolean hasMore) {

        a_layout_fotter_loadmore.setVisibility(VISIBLE);
        if (dataEmpty) {
            mLoadingView.setVisibility(GONE);
            mTvMessage.setVisibility(VISIBLE);
            mTvMessage.setText("没有更多数据啦!");
            iData = DEFINELOADMOREVIEW_NULL;
        } else {
            if (hasMore) {
                mLoadingView.setVisibility(GONE);
                mTvMessage.setVisibility(VISIBLE);
                mTvMessage.setText("点我加载更多");
            } else {
                mLoadingView.setVisibility(GONE);
                mTvMessage.setVisibility(VISIBLE);
                mTvMessage.setText("没有更多数据啦!");
            }
        }

//        if (!hasMore) {
//            setVisibility(VISIBLE);
//
//            iData = DEFINELOADMOREVIEW_NULL;
//            if (dataEmpty) {
//                mLoadingView.setVisibility(GONE);
//                mTvMessage.setVisibility(VISIBLE);
//                mTvMessage.setText("暂时没有数据!");
//            } else {
//                mLoadingView.setVisibility(GONE);
//                mTvMessage.setVisibility(VISIBLE);
//                mTvMessage.setText("没有更多数据啦!");
//            }
//        } else {
////            setVisibility(INVISIBLE);
////            setVisibility(GONE);
////            setVisibility(VISIBLE);
//            mLoadingView.setVisibility(GONE);
//            mTvMessage.setVisibility(VISIBLE);
//            mTvMessage.setText("点我加载更多");
//        }
    }

    /**
     * 加载出错啦，下面的错误码和错误信息二选一。
     *
     * @param errorCode    错误码。
     * @param errorMessage 错误信息。
     */
    @Override
    public void onLoadError(int errorCode, String errorMessage) {
        a_layout_fotter_loadmore.setVisibility(VISIBLE);
        mLoadingView.setVisibility(GONE);
        mTvMessage.setVisibility(VISIBLE);
        iData = errorCode;

        // 这里要不直接设置错误信息，要不根据errorCode动态设置错误数据。
        mTvMessage.setText(errorMessage + " 重新加载");


    }

    /**
     * 调用了setAutoLoadMore(false)后，在需要加载更多的时候，这个方法会被调用，并传入加载更多的listener。
     */
    @Override
    public void onWaitToLoadMore(SwipeMenuRecyclerView.LoadMoreListener loadMoreListener) {
        this.mLoadMoreListener = loadMoreListener;

        a_layout_fotter_loadmore.setVisibility(VISIBLE);
        mLoadingView.setVisibility(GONE);
        mTvMessage.setVisibility(VISIBLE);
        mTvMessage.setText("点我加载更多");
    }

    /**
     * 非自动加载更多时mLoadMoreListener才不为空。
     */
    @Override
    public void onClick(View v) {
        if (mLoadMoreListener != null) mLoadMoreListener.onLoadMore();
    }


    /**
     * 通过接口产生信息回调 加载更多失败 刷新接口
     */
    public interface InfoHint {

        void setOnClickListener(int iData);
    }
}